using System;
using System.Collections.Generic;

namespace PoolKit
{
	internal abstract class ResourceSelectionStrategy<TResource> : ResourceStrategy
		where TResource : class
	{
	    /// <summary>
	    /// 
	    /// </summary>
	    /// <param name="collection"></param>
	    /// <returns></returns>
	    /// <exception cref="ArgumentNullException"></exception>
	    /// <exception cref="CannotSelectResourceException"></exception>
	    public abstract Pooled<TResource> Select(IEnumerable<Pooled<TResource>> collection);

        public override ThreadingContract ThreadingContract
        {
            get
            {
                return ThreadingContract.Multithreaded;
            }
        }
	}
}